Analysis notebook¶
Imports¶
In [1]:
from bokeh.plotting import output_file, save
import json
import os
import pickle
from locpix_points.data_loading import datastruc
from locpix_points.scripts.visualise import visualise_torch_geometric, visualise_parquet, load_file
from locpix_points.evaluation.featanalyse import (
explain,
generate_umap_embedding,
visualise_umap_embedding,
generate_pca_embedding,
visualise_pca_embedding,
visualise_explanation,
k_means_fn,
get_prediction,
subgraph_eval,
pgex_eval,
attention_eval,
test_ensemble_averaging,
)
import matplotlib.pyplot as plt
import pandas as pd
import polars as pl
import seaborn as sns
from sklearn.preprocessing import StandardScaler
import torch
import umap
import yaml
Jupyter environment detected. Enabling Open3D WebVisualizer. [Open3D INFO] WebRTC GUI backend enabled. [Open3D INFO] WebRTCWindowSystem: HTTP handshake server disabled.
/root/micromamba/envs/locpix-points-test/lib/python3.11/site-packages/dask/dataframe/__init__.py:49: FutureWarning: Dask dataframe query planning is disabled because dask-expr is not installed. You can install it with `pip install dask[dataframe]` or `conda install dask`. This will raise in a future version. warnings.warn(msg, FutureWarning) /root/micromamba/envs/locpix-points-test/lib/python3.11/site-packages/numba/np/ufunc/dufunc.py:343: NumbaWarning: Compilation requested for previously compiled argument types ((uint32,)). This has no effect and perhaps indicates a bug in the calling code (compiling a ufunc more than once for the same signature warnings.warn(msg, errors.NumbaWarning) /root/micromamba/envs/locpix-points-test/lib/python3.11/site-packages/numba/np/ufunc/dufunc.py:343: NumbaWarning: Compilation requested for previously compiled argument types ((uint32,)). This has no effect and perhaps indicates a bug in the calling code (compiling a ufunc more than once for the same signature warnings.warn(msg, errors.NumbaWarning) /root/micromamba/envs/locpix-points-test/lib/python3.11/site-packages/numba/np/ufunc/dufunc.py:343: NumbaWarning: Compilation requested for previously compiled argument types ((uint32,)). This has no effect and perhaps indicates a bug in the calling code (compiling a ufunc more than once for the same signature warnings.warn(msg, errors.NumbaWarning)
Functions¶
In [2]:
def find_graph_path(project_directory, file_name, file_folder):
"""Visualise raw data
Args:
project_directory (string): Location of project directory
file_name (string) : Name of file to image
file_folder (string) : Which folder the file is in"""
train_file_map_path = os.path.join(project_directory, f"{file_folder}/train/file_map.csv")
val_file_map_path = os.path.join(project_directory, f"{file_folder}/val/file_map.csv")
test_file_map_path = os.path.join(project_directory, f"{file_folder}/test/file_map.csv")
train_file_map = pd.read_csv(train_file_map_path)
val_file_map = pd.read_csv(val_file_map_path)
test_file_map = pd.read_csv(test_file_map_path)
train_out = train_file_map[train_file_map["file_name"] == file_name]
val_out = val_file_map[val_file_map["file_name"] == file_name]
test_out = test_file_map[test_file_map["file_name"] == file_name]
if len(train_out) > 0:
folder = "train"
file_name = train_out["idx"].values[0]
if len(val_out) > 0:
folder = "val"
file_name = val_out["idx"].values[0]
if len(test_out) > 0:
folder = "test"
file_name = test_out["idx"].values[0]
return os.path.join(project_directory, f"{file_folder}/{folder}/{file_name}.pt")
Parameters¶
In [3]:
project_directory = ".."
# load config
with open(os.path.join(project_directory, "config/featanalyse_manual.yaml"), "r") as ymlfile:
config_manual = yaml.safe_load(ymlfile)
with open(os.path.join(project_directory, "config/featanalyse_nn.yaml"), "r") as ymlfile:
config_nn = yaml.safe_load(ymlfile)
label_map = config_manual["label_map"]
assert label_map == config_nn["label_map"]
manual_features = config_manual["features"]
In [4]:
final_test = True
umap_n_neighbours = 20
umap_min_dist = 0.5
pca_n_components = 2
device = 'cuda'
n_repeats=1
Analyse the nn features¶
In [5]:
if final_test:
test_df_nn_loc = os.path.join(project_directory, "output/test_df_nn_loc.csv")
test_df_nn_loc = pd.read_csv(test_df_nn_loc)
test_df_nn_cluster = os.path.join(project_directory, "output/test_df_nn_cluster.csv")
test_df_nn_cluster = pd.read_csv(test_df_nn_cluster)
test_df_nn_fov = os.path.join(project_directory, "output/test_df_nn_fov.csv")
test_df_nn_fov = pd.read_csv(test_df_nn_fov)
UMAP¶
In [6]:
test_umap_embedding_nn_loc_path = os.path.join(project_directory, "output/test_umap_embedding_nn_loc.pkl")
test_umap_embedding_nn_cluster_path = os.path.join(project_directory, "output/test_umap_embedding_nn_cluster.pkl")
test_umap_embedding_nn_fov_path = os.path.join(project_directory, "output/test_umap_embedding_nn_fov.pkl")
In [7]:
print("------ HANDCRAFTED FEATURES -------")
#with open(train_umap_embedding_nn_loc_path, "rb") as f:
# train_umap_embedding_nn_loc = pickle.load(f)
#visualise_umap_embedding(train_umap_embedding_nn_loc, train_df_nn_loc, label_map)
if final_test:
with open(test_umap_embedding_nn_loc_path, "rb") as f:
test_umap_embedding_nn_loc = pickle.load(f)
visualise_umap_embedding(test_umap_embedding_nn_loc, test_df_nn_loc, label_map, interactive=True)#save=True, save_name="clusternet_only_handcrafted_cluster_features_umap_nn_20_mindist_0.5", project_directory=project_directory, point_size=0.001)
In [8]:
print("------ CLUSTER ENCODER -------")
#with open(train_umap_embedding_nn_cluster_path, "rb") as f:
# train_umap_embedding_nn_cluster = pickle.load(f)
#visualise_umap_embedding(train_umap_embedding_nn_cluster, train_df_nn_cluster, label_map)
if final_test:
with open(test_umap_embedding_nn_cluster_path, "rb") as f:
test_umap_embedding_nn_cluster = pickle.load(f)
visualise_umap_embedding(test_umap_embedding_nn_cluster, test_df_nn_cluster, label_map, interactive=True)#, save=True, save_name="clusternet_only_nn_cluster_encoder_umap_nn_20_mindist_0.5", project_directory=project_directory, point_size=0.001)
In [9]:
print("------ FOV ENCODER -------")
#with open(train_umap_embedding_nn_fov_path, "rb") as f:
# train_umap_embedding_nn_fov = pickle.load(f)
#visualise_umap_embedding(train_umap_embedding_nn_fov, train_df_nn_fov, label_map)
if final_test:
with open(test_umap_embedding_nn_fov_path, "rb") as f:
test_umap_embedding_nn_fov = pickle.load(f)
plot = visualise_umap_embedding(test_umap_embedding_nn_fov, test_df_nn_fov, label_map, interactive=True)# save=True, save_name="clusternet_only_nn_fov_encoder_umap_nn_20_mindist_0.5", project_directory=project_directory, point_size=0.001)
Load in configuration¶
In [10]:
# load in gt_label_map
metadata_path = os.path.join(project_directory, "metadata.json")
with open(
metadata_path,
) as file:
metadata = json.load(file)
# add time ran this script to metadata
gt_label_map = metadata["gt_label_map"]
gt_label_map = {int(key): val for key, val in gt_label_map.items()}
Load model¶
In [11]:
cluster_model = torch.load(os.path.join(project_directory, f"output/cluster_model.pt"))
cluster_model.to(device)
cluster_model.eval()
Out[11]:
ClusterNetHomogeneous( (cluster_encoder_0): PointTransformerConv(8, 16) (cluster_encoder_1): PointTransformerConv(16, 24) (cluster_encoder_2): PointTransformerConv(24, 32) (cluster_encoder_3): PointTransformerConv(32, 40) (linear): Linear(in_features=40, out_features=7, bias=True) (pool): MaxAggregation() )
Load datasets¶
In [12]:
cluster_train_folder = os.path.join(project_directory, "processed/featanalysis/train")
cluster_val_folder = os.path.join(project_directory, "processed/featanalysis/val")
cluster_test_folder = os.path.join(project_directory, "processed/featanalysis/test")
cluster_train_set = datastruc.ClusterDataset(
None,
cluster_train_folder,
label_level=None,
pre_filter=None,
save_on_gpu=None,
transform=None,
pre_transform=None,
fov_x=None,
fov_y=None,
)
cluster_val_set = datastruc.ClusterDataset(
None,
cluster_val_folder,
label_level=None,
pre_filter=None,
save_on_gpu=None,
transform=None,
pre_transform=None,
fov_x=None,
fov_y=None,
)
cluster_test_set = datastruc.ClusterDataset(
None,
cluster_test_folder,
label_level=None,
pre_filter=None,
save_on_gpu=None,
transform=None,
pre_transform=None,
fov_x=None,
fov_y=None,
)
Identify incorrectly predicted points in the UMAP for the test¶
In [13]:
files = plot.renderers[0].data_source.data["file_name"]
files = [x.removesuffix('.parquet') for x in files]
wrong_files = []
for file in files:
file_name = file
x, pred = get_prediction(
file_name,
cluster_model,
cluster_train_set,
cluster_val_set,
cluster_test_set,
project_directory,
device,
gt_label_map)
if x.y.detach().item() != pred:
wrong_files.append(x.name)
new_colors = ["#000000"]*len(files)
for id, file in enumerate(files):
if file in wrong_files:
new_colors[id] = "#FF0000"
----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: O GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: L GT label: L ----- Predicted label: O GT label: L ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: T GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: L GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: O GT label: O ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: O GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: one GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: one GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: L GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: O GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: grid GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: one GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: two GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: O GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: T GT label: T ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: two GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: grid GT label: grid ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: two GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: two GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: one GT label: one ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: three GT label: three ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: one GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: one GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: T GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: one GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: one GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: one GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two ----- Predicted label: two GT label: two
In [14]:
plot.renderers[0].data_source.data["new_colors"] = new_colors
plot.renderers[0].glyph.fill_color = 'new_colors'
plot.renderers[0].glyph.line_color = 'new_colors'
umap.plot.show(plot)
Publication figures¶
In [15]:
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
from torch_geometric.utils.convert import to_networkx
import networkx as nx
from networkx.drawing import draw_networkx, draw
import numpy as np
from matplotlib.colors import ListedColormap, Normalize
Identify points for each class furthest and closest to rest of class¶
In [16]:
x = plot.renderers[0].data_source.data["x"]
y = plot.renderers[0].data_source.data["y"]
labels = plot.renderers[0].data_source.data["item"]
new_colors = plot.renderers[0].data_source.data["new_colors"]
file_name = plot.renderers[0].data_source.data["file_name"]
unique_labels = set(labels)
df = pd.DataFrame({"x": x, "y": y, "label": labels, "correct": new_colors, "name": file_name})
for label in unique_labels:
print("Label: ", label)
class_df = df[df["label"] == label]
x_mean = np.mean(class_df["x"])
y_mean = np.mean(class_df["y"])
class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5
min = class_df.loc[class_df["dist"].idxmin()]
max = class_df.loc[class_df["dist"].idxmax()]
print("--- Min ---")
print(min)
print("--- Max ---")
print(max)
print("---------")
Label: O --- Min --- x -2.192847 y 3.293486 label O correct #000000 name O_68.parquet dist 0.031874 Name: 460, dtype: object --- Max --- x -3.358887 y 8.244182 label O correct #FF0000 name O_292.parquet dist 5.057551 Name: 323, dtype: object --------- Label: L --- Min --- x -0.339023 y -1.965342 label L correct #000000 name L_375.parquet dist 0.128059 Name: 90, dtype: object --- Max --- x -2.389824 y 1.906563 label L correct #FF0000 name L_825.parquet dist 4.253864 Name: 197, dtype: object --------- Label: three --- Min --- x 7.294441 y 1.979617 label three correct #000000 name three_2437.parquet dist 0.037681 Name: 1350, dtype: object --- Max --- x 9.200641 y 3.472509 label three correct #000000 name three_2463.parquet dist 2.393297 Name: 1352, dtype: object --------- Label: two --- Min --- x -10.070409 y -4.774776 label two correct #000000 name two_4524.parquet dist 0.122998 Name: 1627, dtype: object --- Max --- x -5.385725 y 8.956164 label two correct #FF0000 name two_1407.parquet dist 14.578449 Name: 1466, dtype: object --------- Label: grid --- Min --- x 0.741127 y 16.609539 label grid correct #000000 name grid_7301.parquet dist 0.086784 Name: 934, dtype: object --- Max --- x -10.132868 y -7.16441 label grid correct #FF0000 name grid_3676.parquet dist 26.22917 Name: 822, dtype: object --------- Label: T --- Min --- x -4.446292 y 7.871217 label T correct #000000 name T_467.parquet dist 0.090387 Name: 578, dtype: object --- Max --- x -0.201603 y -0.079983 label T correct #FF0000 name T_33.parquet dist 8.961697 Name: 547, dtype: object --------- Label: one --- Min --- x -9.498515 y -8.10234 label one correct #000000 name one_4017.parquet dist 0.087237 Name: 1160, dtype: object --- Max --- x -8.780948 y -5.013817 label one correct #FF0000 name one_928.parquet dist 3.085837 Name: 1195, dtype: object ---------
/tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5 /tmp/ipykernel_2676/4231302908.py:13: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy class_df["dist"] = ((class_df["x"]-x_mean)**2 + (class_df["y"]-y_mean)**2)**0.5
This gives files alternating closest then furthest¶
In [17]:
files = ["two_4524", "two_1407", "T_467", "T_33", "L_375", "L_825", "grid_7301", "grid_3676", "O_68", "O_292", "one_4017", "one_928", "three_2437", "three_2463"]
Raw files¶
In [18]:
if not final_test:
file_folder = "preprocessed/gt_label"
else:
file_folder = "preprocessed/test/gt_label"
fig, ax = plt.subplots(14,1,figsize=(20,80), sharex=True, sharey=True)
for idx, file_name in enumerate(files):
file_path = os.path.join(project_directory, file_folder, file_name + ".parquet")
df, unique_chans = load_file(file_path, "x", "y", None, "channel")
x = df["x"].to_numpy()
y = df["y"].to_numpy()
ax[idx].set_aspect('equal', adjustable='box')
ax[idx].scatter(y, x, s=1, c='k')
ax[idx].axis('off')
scalebar = AnchoredSizeBar(ax[idx].transData,
0.1, '', 'lower left',
pad=1,
color='k',
frameon=False,
size_vertical=0.01)
ax[idx].add_artist(scalebar)
output_path = os.path.join(project_directory, "output", "combined" + '_raw_s_1.svg')
plt.subplots_adjust(wspace=0, hspace=0)
#plt.savefig(output_path, transparent=True, bbox_inches="tight", pad_inches=0)
Clustering¶
In [19]:
if not final_test:
gt_file_folder = "preprocessed/gt_label"
feat_file_folder = "preprocessed/featextract/locs"
else:
gt_file_folder = "preprocessed/test/gt_label"
feat_file_folder = "preprocessed/test/featextract/locs"
fig, ax = plt.subplots(14,1,figsize=(20,80), sharex=True, sharey=True)
colors_grey = ['0.8', (0.0, 1.0, 0.0), (0.9198330167772646, 0.00019544195496590255, 0.9023663764628042), (0.022826063681157582, 0.5658432009989469, 0.9292042754527637), (1.0, 0.5, 0.0), (0.2022271667963922, 0.004776515828955663, 0.892404204324589), (0.3303283202899151, 0.4608491026134133, 0.2941030733894585), (0.5, 1.0, 0.5), (0.7723074963983451, 0.0066115490293984225, 0.15243662980903372), (0.9136952591189091, 0.5104151769385785, 0.7797496184063708), (1.0, 1.0, 0.0), (0.0, 1.0, 1.0), (0.4996633088717094, 0.7906621743682507, 0.01563627319525085)]
cmap_grey = ListedColormap(colors_grey)
colors = [(0.0, 1.0, 0.0), (0.9198330167772646, 0.00019544195496590255, 0.9023663764628042), (0.022826063681157582, 0.5658432009989469, 0.9292042754527637), (1.0, 0.5, 0.0), (0.2022271667963922, 0.004776515828955663, 0.892404204324589), (0.3303283202899151, 0.4608491026134133, 0.2941030733894585), (0.5, 1.0, 0.5), (0.7723074963983451, 0.0066115490293984225, 0.15243662980903372), (0.9136952591189091, 0.5104151769385785, 0.7797496184063708), (1.0, 1.0, 0.0), (0.0, 1.0, 1.0), (0.4996633088717094, 0.7906621743682507, 0.01563627319525085)]
cmap_no_grey = ListedColormap(colors)
for idx, file_name in enumerate(files):
file_path = os.path.join(project_directory, gt_file_folder, file_name + ".parquet")
df_gt = pl.read_parquet(file_path)
file_path = os.path.join(project_directory, feat_file_folder, file_name + ".parquet")
df_feat = pl.read_parquet(file_path)
df = df_feat.join(df_gt, on=["x", "y", "channel", "frame"], how = "outer")
df = df.with_columns(pl.col("clusterID").fill_null(-1))
assert df["channel"].unique().item() == 0
x = df["x"].to_numpy()
y = df["y"].to_numpy()
c = df["clusterID"].to_numpy()
if np.min(c) == -1:
cmap = cmap_grey
else:
cmap = cmap_no_grey
ax[idx].set_aspect('equal', adjustable='box')
ax[idx].scatter(y, x, s=1, c=c, cmap=cmap)
ax[idx].axis('off')
scalebar = AnchoredSizeBar(ax[idx].transData,
0.1, '', 'lower left',
pad=1,
color='k',
frameon=False,
size_vertical=0.01)
ax[idx].add_artist(scalebar)
output_path = os.path.join(project_directory, "output", "combined" + '_clustered_s_1.svg')
plt.subplots_adjust(wspace=0, hspace=0)
#plt.savefig(output_path, transparent=True, bbox_inches="tight", pad_inches=0)
SubgraphX¶
In [20]:
subgraph_config = {
# number of iterations to get prediction
"rollout": 20, # 20
# number of atoms of leaf node in search tree
"min_atoms": 5,
# hyperparameter that encourages exploration
"c_puct": 10.0,
# number of atoms to expand when extend the child nodes in the search tree
"expand_atoms": 14,
# whether to expand the children nodes from high degreee to low degree when extend the child nodes in the search tree
"high2low": False,
# number of local radius to caclulate
"local_radius": 4,
# sampling time of montecarlo approxim
"sample_num": 100, # 100
# reward method
"reward_method": "mc_l_shapley",
# subgrpah building method
"subgraph_building_method": "split",
# maximum number of nodes to include in subgraph when generating explanation
"max_nodes": 8,
# number of classes
"num_classes": 7,
}
In [21]:
# visualise overlaid subgraph using matplotlib
dataitems = torch.load(os.path.join(project_directory, "output/subgraphx_dataitems_rollout_100.pt"))
node_imps = torch.load(os.path.join(project_directory, "output/subgraphx_nodeimps_rollout_100.pt"))
if not final_test:
fold = config["fold"]
file_folder = f"processed/fold_{fold}"
else:
file_folder = "processed"
fig, ax = plt.subplots(7,2,figsize=(10,40), sharex=True, sharey=True)
for idx, file_name in enumerate(files):
file_loc = find_graph_path(project_directory, file_name, file_folder)
# raw file
processed_file = torch.load(file_loc)
processed_file = processed_file.pos_dict['locs'].cpu().numpy()
x = processed_file[:,0]
y = processed_file[:,1]
# center points
x_mean = np.mean(x)
y_mean = np.mean(y)
x = x - x_mean
y = y - y_mean
ax[idx//2, idx%2].set_aspect('equal', adjustable='box')
ax[idx//2, idx%2].scatter(y, x, s=1, c='0.8')
#ax[idx].axis('off')
scalebar = AnchoredSizeBar(ax[idx//2, idx%2].transData,
0.1, '', 'lower right',
pad=1,
color='k',
frameon=False,
size_vertical=0.01)
ax[idx//2, idx%2].add_artist(scalebar)
# graph
nx_g = to_networkx(dataitems[idx], to_undirected=True)
nx_g.remove_edges_from(nx.selfloop_edges(nx_g))
pos = dataitems[idx].pos.cpu().numpy()
node_color = np.where(node_imps[idx].cpu().numpy(), '#00FF00', 'k')
# center points
pos[:,0] = pos[:,0] - x_mean
pos[:,1] = pos[:,1] - y_mean
draw(nx_g, pos=np.flip(pos, axis= 1), ax=ax[idx//2, idx%2], node_color=node_color, node_size=50)
output_path = os.path.join(project_directory, "output", "combined" + '_subgraphx_s_1.svg')
plt.subplots_adjust(wspace=0, hspace=0)
#plt.savefig(output_path, transparent=True, bbox_inches="tight", pad_inches=0)
Visualise clustering in processed graph¶
In [22]:
# visualise overlaid subgraph using matplotlib
dataitems = torch.load(os.path.join(project_directory, "output/subgraphx_dataitems_rollout_100.pt"))
if not final_test:
fold = config["fold"]
file_folder = f"processed/fold_{fold}"
else:
file_folder = "processed"
colors_grey = ['0.8', (0.0, 1.0, 0.0), (0.9198330167772646, 0.00019544195496590255, 0.9023663764628042), (0.022826063681157582, 0.5658432009989469, 0.9292042754527637), (1.0, 0.5, 0.0), (0.2022271667963922, 0.004776515828955663, 0.892404204324589), (0.3303283202899151, 0.4608491026134133, 0.2941030733894585), (0.5, 1.0, 0.5), (0.7723074963983451, 0.0066115490293984225, 0.15243662980903372), (0.9136952591189091, 0.5104151769385785, 0.7797496184063708), (1.0, 1.0, 0.0), (0.0, 1.0, 1.0), (0.4996633088717094, 0.7906621743682507, 0.01563627319525085)]
cmap_grey = ListedColormap(colors_grey)
colors = [(0.0, 1.0, 0.0), (0.9198330167772646, 0.00019544195496590255, 0.9023663764628042), (0.022826063681157582, 0.5658432009989469, 0.9292042754527637), (1.0, 0.5, 0.0), (0.2022271667963922, 0.004776515828955663, 0.892404204324589), (0.3303283202899151, 0.4608491026134133, 0.2941030733894585), (0.5, 1.0, 0.5), (0.7723074963983451, 0.0066115490293984225, 0.15243662980903372), (0.9136952591189091, 0.5104151769385785, 0.7797496184063708), (1.0, 1.0, 0.0), (0.0, 1.0, 1.0), (0.4996633088717094, 0.7906621743682507, 0.01563627319525085)]
cmap_no_grey = ListedColormap(colors)
fig, ax = plt.subplots(14,1,figsize=(20,80), sharex=True, sharey=True)
for idx, file_name in enumerate(files):
file_loc = find_graph_path(project_directory, file_name, file_folder)
# raw file
processed_file = torch.load(file_loc)
c = processed_file.edge_index_dict["locs", "in", "clusters"][1].cpu().numpy()
processed_file = processed_file.pos_dict['locs'].cpu().numpy()
x = processed_file[:,0]
y = processed_file[:,1]
# center points
x_mean = np.mean(x)
y_mean = np.mean(y)
x = x - x_mean
y = y - y_mean
ax[idx].set_aspect('equal', adjustable='box')
if np.min(c) == -1:
cmap = cmap_grey
else:
cmap = cmap_no_grey
ax[idx].scatter(y, x, s=1, c=c, cmap=cmap)
ax[idx].axis('off')
scalebar = AnchoredSizeBar(ax[idx].transData,
0.1, '', 'lower right',
pad=1,
color='k',
frameon=False,
size_vertical=0.01)
ax[idx].add_artist(scalebar)
output_path = os.path.join(project_directory, "output/processed_clusters.svg")
plt.subplots_adjust(wspace=0, hspace=0)
#plt.savefig(output_path, transparent=True, bbox_inches="tight", pad_inches=0)